CSRF漏洞的基本防護措施有以下這些:
避免在URL中明文顯示:特定操作的參數內容在URL中明文顯示特定操作的參數內容,當該Web應用系統存在CSRF漏洞時,能使攻擊者很容易地使用該漏洞對Web應用系統進行攻擊。
驗證HTTP頭部Referer信息:驗證HTTP頭部Referer信息,是防止CSRF攻擊最簡單易行的一種手段。根據RFC對HTTP協議里Referer的定義,Referer信息跟隨出現在每個HTTP請求頭部。服務器端在收到請求之后,可以去檢查這個頭信息,只接受來自本域的請求而忽略外部域的請求。
在請求地址中添加token并驗證:可以在HTTP請求中以參數的形式加入一個隨機產生的token,并在服務器端建立一個攔截器來驗證這個token。如果請求中沒有token或者token內容不正確,則認為可能是CSRF攻擊而拒絕該請求。
在HTTP頭中自定義屬性并驗證:這種方法的實質也是使用token并進行驗證,不過和上一種方法不同的是,這里并不是把token以參數的形式置于HTTP請求之中,而是把它放到HTTP頭中自定義的屬性里。通過XMLHttpRequest這個類,可以一次性給所有該類請求加上csrftoken這個HTTP頭屬性,并把token值放入其中。這種方法解決了上一種方法在請求中加入token的不便,同時,通過XMLHttpRequest請求的地址不會被記錄到瀏覽器的地址欄,也不用擔心token會通過Referer泄露到其他網站中去。
要求用戶提交額外的驗證信息:執行重要業務之前,要求用戶提交額外的驗證信息。例如要求用戶在進行重要業務前輸入口令或圖形驗證碼,強制用戶必須與應用進行交互,才能完成最終的請求。但是驗證碼并非萬能,很多時候,出于用戶體驗考慮,網站不能給所有的操作都加上驗證碼。因此驗證碼只能作為防御CSRF的一種輔助手段,而不能作為最主要的解決方案。
回答所涉及的環境:聯想天逸510S、Windows 10。
CSRF漏洞的基本防護措施有以下這些:
避免在URL中明文顯示:特定操作的參數內容在URL中明文顯示特定操作的參數內容,當該Web應用系統存在CSRF漏洞時,能使攻擊者很容易地使用該漏洞對Web應用系統進行攻擊。
驗證HTTP頭部Referer信息:驗證HTTP頭部Referer信息,是防止CSRF攻擊最簡單易行的一種手段。根據RFC對HTTP協議里Referer的定義,Referer信息跟隨出現在每個HTTP請求頭部。服務器端在收到請求之后,可以去檢查這個頭信息,只接受來自本域的請求而忽略外部域的請求。
在請求地址中添加token并驗證:可以在HTTP請求中以參數的形式加入一個隨機產生的token,并在服務器端建立一個攔截器來驗證這個token。如果請求中沒有token或者token內容不正確,則認為可能是CSRF攻擊而拒絕該請求。
在HTTP頭中自定義屬性并驗證:這種方法的實質也是使用token并進行驗證,不過和上一種方法不同的是,這里并不是把token以參數的形式置于HTTP請求之中,而是把它放到HTTP頭中自定義的屬性里。通過XMLHttpRequest這個類,可以一次性給所有該類請求加上csrftoken這個HTTP頭屬性,并把token值放入其中。這種方法解決了上一種方法在請求中加入token的不便,同時,通過XMLHttpRequest請求的地址不會被記錄到瀏覽器的地址欄,也不用擔心token會通過Referer泄露到其他網站中去。
要求用戶提交額外的驗證信息:執行重要業務之前,要求用戶提交額外的驗證信息。例如要求用戶在進行重要業務前輸入口令或圖形驗證碼,強制用戶必須與應用進行交互,才能完成最終的請求。但是驗證碼并非萬能,很多時候,出于用戶體驗考慮,網站不能給所有的操作都加上驗證碼。因此驗證碼只能作為防御CSRF的一種輔助手段,而不能作為最主要的解決方案。
回答所涉及的環境:聯想天逸510S、Windows 10。